package com.changgou.goods.service.impl;

import com.changgou.goods.dao.BrandMapper;
import com.changgou.goods.pojo.Brand;
import com.changgou.goods.service.BrandService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**record
 * @author 1
 * @data 2022/1/8
 */
@Service
public class BrandServiceImpl implements BrandService {
    @Autowired
    private BrandMapper brandMapper;

    /**
     * 查询所有品牌
     * @return
     */
    @Override
    public List<Brand> findAll() {
        return brandMapper.selectAll();
    }

    /**
     * 添加品牌
     * @param brand
     */
    @Override
    public void add(Brand brand) {
        //这个insert方法    传递过来的数据，即使为null也会存储到数据库当中
        //brandMapper.insert(brand);
        //这个insertSelective方法   传递过来的数据会先进行过滤 不为null才会添加数据库
        brandMapper.insertSelective(brand);

    }

    /**
     * 根据id查询
     * @param id
     * @return
     */
    @Override
    public Brand findById(Integer id) {
        //根据主键查询
        // select * from tb_brand where id =?
        return brandMapper.selectByPrimaryKey(id);
    }

    /**
     * 修改数据
     * @param brand
     */
    @Override
    public void update(Brand brand) {
        //update tb_brand set name=?,image=?,letter=? where id =?
        brandMapper.updateByPrimaryKeySelective(brand);
    }

    /**
     * 删除数据
     * @param id
     */
    @Override
    public void deleteById(Integer id) {
        //delete from tb_brand where id = ?
        brandMapper.deleteByPrimaryKey(id);
    }

    /**
     * 多条件查询
     * @param brand
     * @return
     */
    @Override
    public List<Brand> findList(Brand brand) {
        //letter 就只能是一个字符 like没必要
        //select * from tb_brand where name like ? and letter = ?
        //select * from tb_brand
        //select * from tb_brand where name like ?
        //select * from tb_brand where letter = ?
        Example example = createExample(brand);


        //3.执行条件查询
        List<Brand> brandList = brandMapper.selectByExample(example);
        return brandList;
    }

    //条件查询规则
    private Example createExample(Brand brand) {
        //1.创建条件对象 指定要搜索的字节码对象 表示查询的表
        Example example = new Example(Brand.class);

        //2.组装条件
        Example.Criteria criteria = example.createCriteria();
        //判断brand不为空，若为空则查询所有 select * from tb_brand
        if (brand!=null){
            //如果brand不为空，则继续判断letter是否为空 若为空则判断name
            if (!StringUtils.isEmpty(brand.getLetter())){
                //参数1，指定要比较的pojo的属性名
                //参数2，指定要比较的值
                //equalto只能用于=查询
                //letter不为空
                criteria.andEqualTo("letter",brand.getLetter());
            }

            //若letter不为空 但name为空则执行 select * from tb_brand where letter = ?
            if (!StringUtils.isEmpty(brand.getName())){
                criteria.andLike("name","%"+brand.getName()+"%");
                //若letter为空 但name不为空则 执行 select * from tb_brand where name like ?
            }
            //若letter和name都不为空则 执行 select * from tb_brand where name like ? and letter = ?
        }
        return example;
    }

    /**
     * 分页查询
     * @param page
     * @param size
     * @return
     */
    @Override
    public PageInfo<Brand> findByPage(Integer page, Integer size) {
        //加入起步依赖 自动配置好了
        //开始分页
        PageHelper.startPage(page, size);
        //查询所有
        List<Brand> brandList = brandMapper.selectAll();
        //封装返回结果
        PageInfo<Brand> brandPageInfo = new PageInfo<Brand>(brandList);
        //返回
        return brandPageInfo;
    }

    /**
     * 条件分页查询
     * @param page 当前页数
     * @param size  每页条数
     * @param brand 搜索条件
     * @return
     */
    @Override
    public PageInfo<Brand> findByPage(Integer page, Integer size, Brand brand) {
        //创建条件
        Example example = createExample(brand);
        //开始分页
        PageHelper.startPage(page,size);
        //条件查询
        //List<Brand> list = findList(brand);
        List<Brand> brandList = brandMapper.selectByExample(example);
        //封装结果
        PageInfo<Brand> brandPageInfo = new PageInfo<>(brandList);
        //返回结果
        return brandPageInfo;
    }

    //----------------------------------分割线----------------------------------分割线----------------------------------
    /**
     * 根据id查询所有品牌
     * @param id
     * @return
     */
    @Override
    public List<Brand> findBrandList(Integer id) {
        return brandMapper.findBrandList(id);
    }
}
